import pytest

from boticordpy import types

single_comment_dict = {
    "userID": "525366699969478676",
    "text": "aboba",
    "vote": 1,
    "isUpdated": False,
    "createdAt": 1644388399,
}

bot_data_dict = {
    "id": "724663360934772797",
    "shortCode": "kerdoku",
    "links": [
        "https://boticord.top/bot/724663360934772797",
        "https://bcord.cc/b/724663360934772797",
        "https://myservers.me/b/724663360934772797",
        "https://boticord.top/bot/kerdoku",
        "https://bcord.cc/b/kerdoku",
        "https://myservers.me/b/kerdoku",
    ],
    "server": {"id": "724668798874943529", "approved": True},
    "information": {
        "bumps": 37,
        "added": 1091,
        "prefix": "?",
        "permissions": 1544023111,
        "tags": ["комбайн", "экономика", "модерация", "приветствия"],
        "developers": ["585766846268047370"],
        "links": {"discord": "5qXgJvr", "github": None, "site": "https://kerdoku.top"},
        "library": "discordpy",
        "shortDescription": "Удобный и дружелюбный бот, который имеет крутой функционал!",
        "longDescription": "wow",
        "badge": None,
        "stats": {"servers": 2558, "shards": 3, "users": 348986},
        "status": "APPROVED",
    },
}

server_data_dict = {
    "id": "722424773233213460",
    "shortCode": "boticord",
    "status": "ACCEPT_MEMBERS",
    "links": [
        "https://boticord.top/server/722424773233213460",
        "https://bcord.cc/s/722424773233213460",
        "https://myservers.me/s/722424773233213460",
        "https://boticord.top/server/boticord",
        "https://bcord.cc/s/boticord",
        "https://myservers.me/s/boticord",
    ],
    "bot": {"id": None, "approved": False},
    "information": {
        "name": "BotiCord Community",
        "avatar": "https://cdn.discordapp.com/icons/722424773233213460/060188f770836697846710b109272e4c.webp",
        "members": [438, 0],
        "bumps": 62,
        "tags": [
            "аниме",
            "игры",
            "поддержка",
            "комьюнити",
            "сообщество",
            "discord",
            "дискорд сервера",
            "дискорд боты",
        ],
        "links": {
            "invite": "hkHjW8a",
            "site": "https://boticord.top/",
            "youtube": None,
            "twitch": None,
            "steam": None,
            "vk": None,
        },
        "shortDescription": "short text",
        "longDescription": "long text",
        "badge": "STAFF",
    },
}

user_profile_dict = {
    "id": "178404926869733376",
    "status": '"Если вы не разделяете мою точку зрения, поздравляю — вам больше достанется." © Артемий Лебедев',
    "badge": "STAFF",
    "shortCode": "cipherka",
    "site": "https://sqdsh.top/",
    "vk": None,
    "steam": "sadlycipherka",
    "youtube": None,
    "twitch": None,
    "git": "https://git.sqdsh.top/me",
}


@pytest.fixture
def single_comment() -> types.SingleComment:
    return types.SingleComment(**single_comment_dict)


@pytest.fixture
def bot_data() -> types.Bot:
    return types.Bot(**bot_data_dict)


@pytest.fixture
def server_data() -> types.Server:
    return types.Bot(**server_data_dict)


@pytest.fixture
def user_profile_data() -> types.UserProfile:
    return types.UserProfile(**user_profile_dict)


def test_comment_dict_fields(single_comment: types.SingleComment) -> None:
    for attr in single_comment:
        assert single_comment.get(attr) == getattr(single_comment, attr)


def test_user_profile_dict_fields(user_profile_data: types.UserProfile) -> None:
    for attr in user_profile_data:
        assert user_profile_data.get(attr) == getattr(user_profile_data, attr)


def test_bot_dict_fields(bot_data: types.Bot) -> None:
    for attr in bot_data:
        if attr.lower() == "information":
            assert bot_data["information"].get(attr) == getattr(bot_data, attr)
        else:
            assert bot_data[attr] == getattr(bot_data, attr)


def test_server_dict_fields(server_data: types.Server) -> None:
    for attr in server_data:
        if attr.lower() == "information":
            assert server_data["information"].get(attr) == getattr(bot_data, attr)
        else:
            assert server_data[attr] == getattr(server_data, attr)
